import axios from 'axios'
import { getToken } from '@/utils/token.js'
import router from '@/router/index.js'
import { Message } from 'element-ui'
import { removeToken } from '@/utils/token.js'
import JSONBig from 'json-bigint'
const request = axios.create({
  baseURL: 'http://toutiao.itheima.net',
  timeout: 3000,
   // `transformResponse` allows changes to the response data to be made before
    // it is passed to then/catch
    // 定义后端返回的原始数据的处理
    // 参数 data 就是后端返回的原始数据(未经处理的 JSON 格式数据)
    transformResponse: [function (data) {
      // Do whatever you want to transform the data
      // 后端返回的数据可能不是 JSON 格式字符串
      // 如果不是的话, name JSONbig.parse 调用就会报错
      // 所以我们使用 try-catch 来捕获异常, 处理异常的发生
      try {
        // 如果转换成功,则直接把结果返回
        return JSONBig.parse(data)
      }catch(err){
        // 如果转换失败,则进入这里
        // 我们在这里把数据原封不动的直接返回给请求使用
        return data;
      }
    }],
})

request.interceptors.request.use(config => {
  // 统一配置token请求头
  // let token = getToken()
  // if(token && token.token){
  //   config.headers.Authorization = `Bearer ${token.token}`
  // }
  return config
})

request.interceptors.response.use(response => {
  return response.data
},
error => {
  console.log(error,'error')
  if(error.response.status === 401){ // 身份验证过期
    removeToken() // 删除过期的token
    Message({
      type: 'error',
      message: '身份验证过期'
    })
    router.replace(`/login?path=${router.currentRoute.fullPath}`) // 保留当前的url,重新登录后再跳转回原来需要登录的地方
  }
  return Promise.reject(error)
}
)

export default request
